#define  _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
//粉刷房子，多状态的dp问题
//虽然已经做了好几道多状态的dp问题的了，但是一上手还是没有思路，但是发现这种题的切入点在于分类讨论在某一点处的
//最重要的是分类讨论以及确定状态转移方程

using namespace std;

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        int n = costs.size();

        //创建dp表
        vector<vector<int>> dp(n + 1, vector<int>(3));


        //填表
        for (int i = 1; i <= n; i++)
        {
            dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0];
            dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1];
            dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + costs[i - 1][2];

        }
        //返回值
        int ret = min(dp[n][0], min(dp[n][1], dp[n][2]));

        return ret;

    }
};




int main()
{

	return 0;

}